Gin+Gorm开发在线备忘录(To do list)
仓库地址:https://github.com/qingbo1011/gin-memos
Gin:
Gorm:
记录ShouldBind使用遇到的坑(GET or POST?)
这里是我自己马虎了:
因为API里使用的是GET
,所以在PostMan中就应该这么写URL:localhost:8080/api/task/getall?page_size=2&page_num=1
gorm分页查询报错 sql: no rows in result set
参考文章:gorm分页查询count报错 sql: no rows in result set
原本gorm的查询是这么写的:DB.Where("uid = ?", uid).Limit(s.PageSize).Offset(s.PageSize * (s.PageNum - 1)).Find(&tasks).Count(&count)
。
注意:Count()
查询必须在where
条件之后,limit
,offset
分页之前
- 如果写在
limit
,offset
分页 之前之后,在第二页开始就会报错sql: no rows in result set
count
也不能太前,否则查询出来的总数将是所有数据总数,非条件过滤后的条数
1
2
3
4
5
6 // 错误db.Order("id desc").Limit(10).Offset(10).Find(&List).Count(&totalRows)
//count应该条件where之后,分页条件之前,如以下,但是结果报错:incorrect table name
db.Order("id desc").Count(&totalRows).Limit(10).Offset(10).Find(&List)
// 正确写法
db.Table("TableName").Order("id desc").Count(&totalRows).Limit(10).Offset(10).Find(&List)
修改后应该如下:DB.Table("task").Order("created_at desc").Where("uid = ?", uid).Count(&count).Limit(s.PageSize).Offset(s.PageSize * (s.PageNum - 1)).Find(&tasks)
关于分页查询中添加keyword进行模糊查询的gorm写法
代码中我是这样写的:
1 | err := mysql.DB.Table("task").Where("uid = ? and tittle like ?", uid, "%"+s.KeyWord+"%").Or("uid = ? and context like ?", uid, "%"+s.KeyWord+"%"). |
但也可以这样写,连续带上两个Where
:
1 | err := mysql.DB.Table("task").Where("uid = ?", uid).Where("tittle like ? or context like ?", "%"+s.KeyWord+"%", "%"+s.KeyWord+"%"). |